package com.markhsiu.framework.spring.schema;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;

import com.markhsiu.framework.spring.Tools;

/**
 * 工具用户信息
 * @author Administrator
 *
 */
public class UserBeanDefinitionParser implements BeanDefinitionParser {
	
	/**
	 *    设置相关的BeanClass，解析了对应的xsd文件，并将解析的内容注册到上下文中，
	 *    同时返回一个BeanDefinition对象（BeanDefinition是Spring的bean定义，
	 *    提供了bean部分的操作方法，如isSingleton()、isLazyInit()等)。注意：id
	 *    属性是一个默认的属性，可以不在xsd文件中描述，但是需要注册它，否则将无法
	 *    通过getBean方法获取标签定义的bean，也无法被其他bean引用。
	 */
	public BeanDefinition parse(Element element, ParserContext context) {
		
		RootBeanDefinition def = new RootBeanDefinition();

		// 设置Bean Class
		def.setBeanClass(Tools.class);

		// 注册ID属性
		String id = element.getAttribute("id");
		BeanDefinitionHolder idHolder = new BeanDefinitionHolder(def, id);
		BeanDefinitionReaderUtils.registerBeanDefinition(idHolder,
				context.getRegistry());

		// 注册属性
		String username = element.getAttribute("username");
		String name = element.getAttribute("name");

//		BeanDefinitionHolder usernameHolder = new BeanDefinitionHolder(def,
//				username);
//		BeanDefinitionHolder nameHolder = new BeanDefinitionHolder(def,
//				name);
//
//		BeanDefinitionReaderUtils.registerBeanDefinition(usernameHolder,
//				context.getRegistry());
//		BeanDefinitionReaderUtils.registerBeanDefinition(nameHolder,
//				context.getRegistry());

		def.getPropertyValues().addPropertyValue("username", username);
		def.getPropertyValues().addPropertyValue("name", name);

		return def;
	}
}